package com.you.raft.core;

import com.you.raft.common.entity.*;

public interface RaftNode {
    /**
     * 启动节点:加载相应的模块，启动相应的线程
     *
     * @param config 节点配置信息：节点端口,所有节点地址
     */
    void init(NodeConfig config) throws Exception;

    /**
     * 关闭节点
     */
    void destory() throws Exception;

    /**
     * 以下两个方法由Consensus一致性模块实现
     *
     * @see Consensus
     */

    VoteResponse handlerVoteRequest(VoteRequest request);

    AppendEntryResponse handlerAppendEntry(AppendEntryRequest request);

    /**
     * 以下方法由客户端服务ClientService实现
     *
     * @see ClientService
     */
    ClientResponse handlerClientRequest(ClientRequest request);

}
